静态变量

  局部变量将在运行线程达到其定义时进行初始化。按照默认方式,这件事发生在函数的每次调用中,且函数的每个调用有自己的一份局部变量副本。如果一局部变量被声明为static,那么将只有惟一的一个静态分配的对象(C.9节),它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它的定义时初始化。例如,

    void f(int a)
    {
        while(a--) {
            static int n = 0;            // 初始化一次
            int x = 0;                   // 在每个f()调用时初始化a次

            cout << "n==" << n++ << ", x==" << x++ << '\n';
        }
    }

    int main()
    {
        f(3);
    }

这将打印出

n==0, x==0
n==1, x==0
n==2, x==0

静态变量为函数提供了一种“存储器”,使我们不必去引进可能被其他函数访问或破坏的全局变量(另见10.2.4节)。

🔚